﻿//-----------------------------------------------------------------------
// <copyright file="StringExtensions.cs" company="CodePlex">
//     Copyright (c) Doug Holland, CodePlex. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
namespace CodePlex.Diagnostics
{
    using System;

    using System.Collections;
    using System.Collections.Generic;

    using System.Security;
    using System.Security.Principal;

    using System.Xml;
    using System.Xml.Linq;
    
    using CodePlex.Diagnostics.Contracts;
    
    /// <summary>
    /// Provides extension methods for the <see cref="T:System.String"/> class to enable the writing of log entries using the CodePlex.Diagnostics framework.
    /// </summary>
    public static class StringExtensions
    {
        #region public static Guid Log(this string entry, LoggingPriority priority, LoggingType type)

        /// <summary>
        /// Writes the <see cref="T:System.String"/> using the configured logging provider.
        /// </summary>
        /// <param name="entry">The <see cref="T:System.String"/> to be logged.</param>
        /// <param name="priority">The <see cref="T:CodePlex.Diagnostics.LoggingPriority"/> of the log entry.</param>
        /// <param name="type">The <see cref="T:CodePlex.Diagnostics.LoggingType"/> of the log entry.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for the log entry.</returns>
        public static Guid Log(this string entry, LoggingPriority priority, LoggingType type)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, IIdentity identity)

        /// <summary>
        /// Writes the <see cref="T:System.String"/> using the configured logging provider.
        /// </summary>
        /// <param name="entry">The <see cref="T:System.String"/> to be logged.</param>
        /// <param name="priority">The <see cref="T:CodePlex.Diagnostics.LoggingPriority"/> of the log entry.</param>
        /// <param name="type">The <see cref="T:CodePlex.Diagnostics.LoggingType"/> of the log entry.</param>
        /// <param name="identity">The <see cref="T:System.Security.Principal.IIdentity"/> to associate with the log entry.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for the log entry.</returns>
        public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, IIdentity identity)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, Dictionary<string, string> dictionary)

        /// <summary>
        /// Writes the <see cref="T:System.String"/> using the configured logging provider.
        /// </summary>
        /// <param name="entry">The <see cref="T:System.String"/> to be logged.</param>
        /// <param name="priority">The <see cref="T:CodePlex.Diagnostics.LoggingPriority"/> of the log entry.</param>
        /// <param name="type">The <see cref="T:CodePlex.Diagnostics.LoggingType"/> of the log entry.</param>
        /// <param name="dictionary">A <see cref="T:System.Collections.Generic.Dictionary`2"/> containing name value pairs associated with this log entry.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for the log entry.</returns>
        public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, Dictionary<string, string> dictionary)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, Dictionary<string, string> dictionary, IIdentity identity)

        /// <summary>
        /// Writes the <see cref="T:System.String"/> using the configured logging provider.
        /// </summary>
        /// <param name="entry">The <see cref="T:System.String"/> to be logged.</param>
        /// <param name="priority">The <see cref="T:CodePlex.Diagnostics.LoggingPriority"/> of the log entry.</param>
        /// <param name="type">The <see cref="T:CodePlex.Diagnostics.LoggingType"/> of the log entry.</param>
        /// <param name="dictionary">A <see cref="T:System.Collections.Generic.Dictionary`2"/> containing name value pairs associated with this log entry.</param>
        /// <param name="identity">The <see cref="T:System.Security.Principal.IIdentity"/> to associate with the log entry.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for the log entry.</returns>
        public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, Dictionary<string, string> dictionary, IIdentity identity)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, Dictionary<string, string> dictionary, XElement element, IIdentity identity)

        /// <summary>
        /// Writes the <see cref="T:System.String"/> using the configured logging provider.
        /// </summary>
        /// <param name="entry">The <see cref="T:System.String"/> to be logged.</param>
        /// <param name="priority">The <see cref="T:CodePlex.Diagnostics.LoggingPriority"/> of the log entry.</param>
        /// <param name="type">The <see cref="T:CodePlex.Diagnostics.LoggingType"/> of the log entry.</param>
        /// <param name="dictionary">A <see cref="T:System.Collections.Generic.Dictionary`2"/> containing name value pairs associated with this log entry.</param>
        /// <param name="element">A <see cref="T:System.Xml.Linq.XElement"/> representing an xml element to be associated with this log entry.</param>
        /// <param name="identity">The <see cref="T:System.Security.Principal.IIdentity"/> to associate with the log entry.</param>
        /// <returns>A <see cref="T:System.Guid"/> representing the unique publication identifier for the log entry.</returns>
        public static Guid Log(this string entry, LoggingPriority priority, LoggingType type, Dictionary<string, string> dictionary, XElement element, IIdentity identity)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}